## 实验三十五  红外遥控灯

![img](./media/wps368.png) 

**实验说明**

大家生活中不知道有没有这个场景，当我们快要入睡的时候，还没有关灯，然而灯的开关又比较远，当我们起床去关灯，又影响了我们入睡，这个时候大家是不是希望有个遥控器能遥控电视一样来控制灯光，这样就方便多了。在前面实验中，我们学会了点亮或熄灭LED、利用PWM技术调节灯光的亮度；实验二十一，我们学会了使用红外接收模块，并把接收到的遥控器的信息打印了出来。那么在这个实验中，我们就用红外遥控接控制我们的LED模块亮灭和亮度。

当我们接收到一个按键值时，我们通过对应按键值来设置输出的PWM值，这样就可以设置亮度了，控制LED亮灭也一样，但是如果说，在控制LED亮灭这里，我们用同一个按键来控制LED的亮与灭，就需要一个灵活的编程技巧了。我们可以先自己思考，再来看程序。

 

**实验器材**

| ![img](./media/wps369.jpg) | ![img](./media/wps370.jpg) | ![img](./media/wps371.jpg)      | ![img](./media/wps372.jpg)       |
| -------------------------- | -------------------------- | ------------------------------- | -------------------------------- |
| Raspberry Pi Pico板*1      | Raspberry Pi Pico扩展板*1  | keyes DIY电子积木 白色LED模块*1 | keyes DIY电子积木 红外接收模块*1 |
| ![img](./media/wps373.jpg) | ![img](./media/wps374.jpg) | ![img](./media/wps375.png)      |                                  |
| MicroUSB线*1               | 遥控器*1                   | 防反插3Pin*2                    |                                  |

 

**接线图**

![img](./media/wps376.jpg) 

**测试代码**

```c
/*

  Keyes Starter Kit for Raspberry Pi Pico

  lesson 35

  IR control LED

 */

#include"ir.h"

IR IRreceive(16);//红外接收接GP16

int led = 14;//LED接GP14

boolean flag = true;//LED标志位

void setup() {

 Serial.begin(9600);

 pinMode(led, OUTPUT);

 delay(1000);

}

////////////////////

void loop() {

 Serial.println("IR receive");

 while (1) {

  int key = IRreceive.getKey();

  if (key != -1) {

   Serial.print(key);

   if (key == 64) { //按下OK键

    if (flag == true) {//flag为真

     digitalWrite(led, HIGH);//打开LED

     Serial.println("  led on");

     flag = false;//flag变为假

    } else { //flag为假

     digitalWrite(led, LOW);//关闭LED

     Serial.println("  led off");

     flag = true;//flag变为真

    }

   }

  }

 }

}
```

**代码说明**

1. 与前面定义变量不同，这里我们定义一个布尔变量，布尔变量的值只有两个，真（true）或者假（false），**boolean flag = true**。
2. 我们按下OK键时，红外接收的值为64，此时我们需要设置一个布尔变量flag，flag为**真(true)**的时候点亮LED，为**假(false)**的时候熄灭LED，点亮LED后我们又把它设置为假，这样当下次按下OK键时，LED将熄灭。

 

**测试结果**

上传测试代码成功，按照接线图接好线，上电后，打开串口监视器，设置波特率为9600.按下遥控器按钮，串口监视器显示我们按下的值，按下ok键点亮LED，再次按下LED熄灭LED。

![img](./media/wps377.png) 

![img](./media/wps378.jpg)